#ifndef LIST_H
#define LIST_H

struct ListItem
{
    ListItem* previous;
    ListItem* next;
    int start;//资源块起始地址
    int size;//资源块大小
    ListItem(int start=0,int size=0,ListItem* previous=nullptr,ListItem* next=nullptr)
    {
        this->start=start;
        this->size=size;
        this->previous=previous;
        this->next=next;
    }
};
class List
{
public:
    ListItem head;

    List();//初始化
    void initialize();
    int size();//返回元素个数
    bool empty();
    ListItem* back();//返回最后一个元素指针
    void push_back(ListItem* item);
    void pop_back();
    ListItem* front();//返回第一个元素指针
    void push_front(ListItem* item);
    void pop_front();
    void insert(int pos,ListItem* item);//插入到pos
    void insert_start(ListItem* item);//根据size大小插入
    void erase(int pos);//删除pos
    void erase(ListItem* item);
    ListItem* at(int pos);//返回pos序号指针
    int find(ListItem* item);//返回指针位置
    int find_start(int start);//返回第一个start值相同元素
    void append_list(List add);//添加链表到后面
};

#endif